#include <bits/stdc++.h>
using  namespace std;
int t;
int  n,m,L,V;
int sum;
struct node{
	int d;
	int v;
	int a;
	double l;
	bool bl;
	double r;
	int br;
}A[100003];
int B[100003];
int main(){
	freopen("detect.in","r",stdin);
	freopen("detect.out","w",stdout);
	cin >> t;
	for(int i=1;i<=t;i++){
		int sum=0;
		cin >> n >> m >> L>> V;
		for(int j=1;j<=n;j++){
			cin >> A[j].d  >> A[j].v  >> A[j].a;
			if(A[j].v>V&&A[j].a>=0){
				A[j].l=A[j].d;
				A[j].bl=0;
				A[j].r=L+1;
				A[j].br=0;
			}
			if(A[j].v<V&&A[j].a<=0){
				A[j].l=-1;
				A[j].r=-1;
				A[j].bl=0;
				A[j].br=0;
			}
			if(A[j].v>=V&&A[j].a<0){
				A[j].l=A[j].d;
				A[j].r=(A[j].v*A[j].v-V*V)*1.0/(-2*A[j].a);
				A[j].bl=0;
				A[j].br=-1;
			}
			if(A[j].v<=V&&A[j].a>0){
				A[j].l=(V*V-A[j].v*A[j].v)*1.0/(2*A[j].a)+A[j].d;
				A[j].r=A[j].l+L+1;
				A[j].bl=-1;
				A[j].br=0;
			}
		}
		for(int j=1;j<=m;j++){
			cin >> B[j];
		}
		if(A[1].a==0){
			for(int j=n;j>=1;j--){
				if(B[m]>=A[j].d&&A[j].v>V){
					sum++;
				}
			}
			cout << sum << ' ' ;
			if(sum==0){
				cout << m << endl;
				continue;
			}else{
				cout << m-1 << endl;
			}
			
		}
		if(A[1].a>0){
			for(int j=n;j>=1;j--){
				if(B[m]==A[j].l&&A[j].v>V){
					sum++;
				}
				if(B[m]>A[j].l){
					sum++;
				}
			}
			cout << sum << ' ';
			if(sum==0){
				cout << m << endl;
				continue;
			}else{
				cout << m-1 << endl;
			}
		}
	}
	fclose(stdin);
	fclose(stdout);
	return 0;
}
